package com.liuqi.knet.remoting.exchange;

import com.liuqi.knet.remoting.RemotingException;
import java.util.concurrent.TimeUnit;

/**
 * 发起请求后, 返回此实例, 获取异步响应结果
 *
 * @author liuqi
 * @date 2024/12/17 15:23
 **/
public interface ResponseFuture {

    /**
     * 关闭此Future
     */
    void cancel();

    /**
     * 此Future是否关闭
     *
     * @return
     */
    boolean isCancelled();

    /**
     * 获取响应结果, 应用默认的超时时间
     *
     * @return
     * @throws RemotingException
     */
    Response get() throws RemotingException;

    /**
     * 获取响应结果
     *
     * @param timeout   超时时间
     * @param timeUnit  超时时间单位
     * @return
     * @throws RemotingException
     */
    Response get(int timeout, TimeUnit timeUnit) throws RemotingException;

    /**
     * 此Future是否完成
     *
     * @return
     */
    boolean isDone();

}
